/**
 * @param {number[]} coins
 * @param {number} amount
 * @return {number}
 */
 var coinChange = function(coins, amount) {   // 状态转移方程 ： F(i)=min(F(i-coins[0]),F(i-coins[1]),.....);
    let length=coins.length;
    let res=new Array(amount+1).fill(amount+1);  // 存放1-amount的最优解  i的最优解 
    res[0]=0;
    for(let i=1;i<=amount;i++){          
        for(let j=0;j<length;j++){     // 每种硬币的情况都遍历一遍
            if(coins[j]<=i){  // 判断是否可以使用该硬币  不可以的话就不做改变 可以的话，计较当前与F（i-coins[])
                res[i]=Math.min(res[i],res[i-coins[j]]+1);
            }
        }
    }
    return res[amount]>amount ? -1 : res[amount];
};
console.log(coinChange(
    [186,419,83,408]
    ,6249))